"""
V1.0  需知道每个用例的执行时间

"""
import time


#---------方案一-----------
# def test():
#     print('------开始自动化测试')
#     startTime = time.time()
#     time.sleep(5)
#     endtime = time.time()
#     print('执行时间>>>>>',endtime-startTime)
#
#
# if __name__ == '__main__':
#     test()

"""
方案一测试反馈：
    1- 每个函数都要加上startTime/endtime 很麻烦（你直接修改了代码--重构代码---100个）
    2- 后续还有需求，思路一直改代码
"""

#---------方案二--------------
"""
方案二：
    1- 不能修改源代码
    2- 改变函数的执行方式--没有达到预期

"""


# def show_time(func):
#     print('------开始自动化测试')
#     startTime = time.time()
#     func()
#     time.sleep(5)
#     endtime = time.time()
#     print('执行时间>>>>>', endtime - startTime)
#
# if __name__ == '__main__':
#     show_time(test)



#----------方案三---------------
"""
方案
    1-新增功能
    2-不能改变函数调用方式
    3-不能修改源代码
    
操作流程：
    1-python 装饰器
    2-闭包的概念
        函数内部可以在定义函数，如果内部函数使用了外层函数的变量，则会产生闭包
    3-装包，解包
        装包  def (*args)  把传入形参--装成一个元组
        解包  list =[100,200]  函数调用a(*list)
"""
# def test_a(func):  #外函数
#
#     def test_b():  #内函数
#         start_time = time.time()
#         func()
#         endtime = time.time()
#         print('接口执行耗时>>>>',endtime-start_time)
#     return test_b
# @test_a  # 等于  test=test_a(test)  #函数对象  test=test_b
# def test():
#     print('自动化测试')
#     time.sleep(1)
#
# @test_a  # 等于  test=test_a(test)  #函数对象  test=test_b
# def test_2():
#     print('自动化测试测试2')
#     time.sleep(1)

"""
闭包函数是好用，但是如果要新增功能的函数都得家一行代码
优化： 语法糖  @test_a 这个装饰器在什么函数前面加@
    函数名变量 = test_a(函数名)
"""
# if __name__ == '__main__':
#     # test=test_a(test)  #函数对象  test=test_b
#     test()
#     test_2()


#------------带参数传递的装饰器---------------------
"""
带参数 就要在内函数里加*args,**kwargs
"""
def test_a(func):  #外函数

    def test_b(*args,**kwargs):  #内函数
        start_time = time.time()
        res = func(*args,**kwargs)  #内函数
        endtime = time.time()
        print('接口执行耗时>>>>',endtime-start_time)
        return res  #这个返回只事test_b 的返回值，TypeError: 'NoneType' object is not subscriptable   把test_login 的变量接过来，再返回去
    return test_b
@test_a  # 等于  test=test_a(test)  #函数对象  test=test_b
def test(*args,**kwargs):
    print('自动化测试',args)
    time.sleep(1)

if __name__ == '__main__':
    test(100)